\documentclass{article}
\usepackage{float}
\usepackage{geometry}
\geometry{
    % a4paper,.
    top=1cm,
    % top=2.2cm, bottom=2.2cm, 
    bottom=1cm,
    left=0cm, right=0cm,
    % heightrounded,
    % totalheight=infinite,  % 理论上允许无限高度（需谨慎使用）
    % totalheight=\maxdimen  % 理论上允许无限高度（需谨慎使用）
}

% % 临时调整页面高度
% \newgeometry{
%     top=2.2cm, bottom=2.2cm, 
%     left=3.5cm, right=3.5cm,
%     totalheight=\maxdimen  % 理论上允许无限高度（需谨慎使用）
% }

% \checkandfixthelayout
% \documentclass[a4paper]{article}
% \usepackage[linesnumbered,ruled,vlined,algo2e]{algorithm2e}
\usepackage[linesnumbered,ruled,vlined,algo2e,lined]{algorithm2e}
% \SetAlgoWidth{0.9\textwidth} % 预留边距，增加可用宽度
% \SetAlgoIndent{1em} % 减少缩进（默认 1.5em），释放水平空间
% \renewcommand{\algomargin}{1em} % 减少算法与页边距的间隔
% \SetAlgoWidth{0.9\textwidth} % 算法宽度为页面的 90%
% \SetAlgoVlined % 显示垂直分隔线（可选，增加结构感）
% \SetAlgoSkip{smallskip} % 压缩行间距，减少垂直空间占用
% \SetAlgoWidth{0.9\textwidth} % 缩小算法宽度
% \SetAlgoLined：增添end行
% \DontPrintSemicolon：不显示行末尾的分号
% \SetKwInput{KwInput}{Input}：设置输入
% \SetKwInOut{KwInput}{Input}：设置输入输出
% ruled：标题左对齐，顶部和底部各添加一条线
% linesnumbered：显示行编号
\usepackage{ctex} %注意，这里必须引入ctex,否则中文内容无法输出
\SetKwRepeat{Do}{do}{while}
\SetKwFunction{Try}{try}
\SetKwFunction{Catch}{catch}
% \SetKwProg{TryCatch}{Try}{Catch}{}
% 全局禁用页码
\pagestyle{empty}

\begin{document}
% \begin{minipage}{\linewidth}
    % \centering % 居中显示
    % \sloppy % 全局启用宽松断词
\begin{algorithm2e}[H]

    % \SetAlgorithmName{算法}{算法}{算法列表}  % 中文标题

% \SetAlgorithmName{Procedure}{Procedure}{List of Procedures}  % 自定义英文标题
\renewcommand{\thealgocf}{4-3} %自定义算法编号
    % \sloppy % 允许当前算法自动换行
    \SetAlgoLined
    % \SetAlgoNoEnd

    \caption{API文档生成、路径探测算法}
    \SetKwInOut{KwIn}{\textbf{输入}}
    \SetKwInOut{KwOut}{\textbf{输出}}	

    \KwIn{library\_name,file\_name,function\_name,file\_path}

    % \KwOut{dictionary structure of containing API information:$analysis\_dict$}
    \KwOut{API file path corresponding to generating function:$api\_file\_path$}

    % 真正的函数体：
    \SetKwFunction{FMain}{analysis\_API\_document}
    \SetKwProg{Fn}{Function}{}{}
    \Fn{\FMain{self,library\_name,file\_name,function\_name,file\_path}}{
        out\_path $\gets$ Join(self.document\_hub\_path,library\_name) //API文档生成基础路径为API文档根仓库路径+项目名\\
        \textbf{try:} \\
        \Indp subprocess.check\_call([sys.executable, "-m", "pdoc","--no-show-source","-o", out\_path,file\_path]) //使用pdoc组件生成API文档 \\
        \Indm
        \textbf{catch:} subprocess.CalledProcessError \\
        \Indp 
        // 报错信息写入log日志文件 \\
        \Indm

        module\_name $\gets$ Split(file\_name, ".")[0] //获取模块名\\ 
        file\_path\_prefix $\gets$  Split(file\_path, ".")[0] //获取源码文件路径前缀\\
        % directory\_name $\gets$ file\_path\_prefix.Replace("src/","")
        % directory\_name $\gets$ file\_path\_prefix.Replace("src/","").Replace("lib/","").Replace(f"\{self.repo\_path\}/\{library\_name\}/","") //获取目录名，其中self.repo\_path代表源码仓库根路径\\
        directory\_name $\gets$ file\_path\_prefix.Replace("src/","lib/",f"\{self.repo\_path\}/\{library\_name\}/","") //获取目录名，其中self.repo\_path代表源码仓库根路径\\
        % directory\_name=file\_path\_prefix("src/","").replace('lib/',"").replace(f"\{self.repo_path\}/\{library_name\}/","")
        candidate\_paths:List $\gets$ "out\_path"+[ $Combination\_All$(module\_name,file\_path\_prefix, directory\_name,"index") ]+".html" //组合所有路径,以进行API文档探测 \\
        api\_file\_path=None //API文档路径初始化为空 \\
        \ForEach{candidate\_path in candidate\_paths}{
        \If{check\_node\_mapping\_exists(candidate\_path,function\_name) is exists}
        {
            %   sub $\gets$ a - b
            % \Return{True}\\
            api\_file\_path $\gets$  candidate\_path \\
            \textbf{break}
        }
        }
        //API文档节点信息提取算法 \\
    }\textbf{end} \\

    % 主体函数结束

    //判断是否是函数对应API文档 \\
    % 副函数开始
    \SetKwFunction{FMain}{check\_node\_mapping\_exists}
    \SetKwProg{Fn}{Function}{}{}
        \Fn{\FMain{self,file\_path,function\_name}}{ 

            \eIf{file\_path is exists}
            {
                %   sub $\gets$ a - b
                doc=pq(filename=file\_path) //使用pq解析API文档\\
                function\_node=doc.find("\#"+function\_name)\\
                //查找是否存在对应函数节点\\
                \If{function\_node is exists}
                {
                    %   sub $\gets$ a - b
                    \Return{True}
                }
                \Return{False}
            }            
            {
                \Return{False}
            }
        }\textbf{end}

\end{algorithm2e}
% \end{minipage}
\end{document}    